#include <iostream>
#include <queue>
#include <unordered_map>
#include <vector>
using namespace std;
const int N = 2 * 1e5 + 1;
int main()
{
	int n = 0, m = 0;
	cin >> n >> m;
	int x = 0, y = 0;
	unordered_map<int, vector<int>> Edge;
	vector<int> in(N);
	while (cin >> x >> y) // x 指向 y
	{
		Edge[x].push_back(y);
		in[y]++;
	}
	// for(auto& [a, b] : Edge)
	// {
	// cout << a << " -> ";
	// for(auto& e : b)
	// {
	// cout << e << " ";
	// }
	// cout << endl;
	// }
	// for(auto& e : in)
	// {
	// if(e != 0)
	// cout << e << " ";
	// }
	// cout << endl;
	priority_queue<int> q;
	for (int i = 1; i <= n; ++i)
	{
		if (in[i] == 0)
		{
			q.push(i);
			// cout << "begin" << i;
		}
	}
	vector<int> res;
	while (q.size())
	{
		int tmp = q.top();
		q.pop();
		res.push_back(tmp);
		for (auto& e : Edge[tmp]) // tmp指向的边的入度减一
		{
			in[e]--;
			if (in[e] == 0) // 减为0了就进队列
				q.push(e);
		}
		// // Edge.erase(tmp); // 加这步?
		// for(auto& [a, b] : Edge)
		// {
		// cout << a << " -> ";
		// for(auto& e : b)
		// {
		// cout << e << " ";
		// }
		// cout << endl;
		// }
		// for(int i = 1; i <= n; ++i)
		// {
		// cout << in[i] << " ";
		// }
		// cout << endl;
	}
    if(res.size() != n)
    {
        cout << -1;
    }
    else
    {
        for (int i = 0; i < n - 1; ++i)
        {
            cout << res[i] << " ";
        }
        cout << res[n - 1]; // 666666666666666
    }
	return 0;
}